package com.rowline.designpatterndemo.math;

/**
 * @author: luoting
 * @date: 2019/6/12 15:05
 * @description:
 */
public class CountAndSayTest {

    /*
    报数序列是一个整数序列，按照其中的整数的顺序进行报数，得到下一个数。其前五项如下：
    1.     1
    2.     11
    3.     21
    4.     1211
    5.     111221
    1 被读作  "one 1"  ("一个一") , 即 11。
    11 被读作 "two 1s" ("两个一"）, 即 21。
    21 被读作 "one 2",  "one 1" （"一个二" ,  "一个一") , 即 1211。
    */

    public static void main(String[] args) {
        int n = 7;
        System.out.println("countAndSay(" + n + "):"+ countAndSay(n));

    }

    public static String countAndSay(int n) {
        if(n == 1){
            return "1";
        }
        String preResult = countAndSay(n - 1);
        System.out.println("countAndSay(" + (n-1) + "):"+ preResult);
        String result = "";
        int count = 0;
        String pre_s = null;
        for (int i = 0; i < preResult.length(); i++) {
            String s = preResult.substring(i,i+1);
            if (pre_s == null){
                count = 1;
            }else if(s.equals(pre_s)) {
                count++;
            }else {
                result += count + pre_s;
                count = 1;
            }
            if(i == preResult.length()-1){
                result += count + s;
            }
            pre_s = s;
        }
        return result;
    }

}
